#include <stdio.h>
#include <string.h>
#include <stdlib.h>

// 字符串分割函数
// addr: 输入字符串
// strSeg: 输出参数，存储分割后的字符串数组
// 返回值: 分割后的字符串数量
int split_str(const char* addr, char ***segment) {
    // 1. 复制原始字符串（strtok会修改源字符串）
    char *temp = strdup(addr);
    if (!temp) return -1;
    
    const char delim[] = "/";
    char *saveptr;
    int count = 0;
    
    // 2. 第一次遍历：计算分割数量
    char *token = strtok_r(temp, delim, &saveptr);
    while (token != NULL) {
        count++;
        token = strtok_r(NULL, delim, &saveptr);
    }
    
    // 3. 分配字符串数组内存
    *segment = (char **)malloc(count * sizeof(char *));
    if (!*segment) {
        free(temp);
        return -1;
    }
    
    // 4. 第二次遍历：填充分割结果
    strcpy(temp, addr);  // 重置临时字符串
    token = strtok_r(temp, delim, &saveptr);
    int i = 0;
    while (token != NULL) {
        (*segment)[i] = strdup(token);  // 复制每个子串
        if (!(*segment)[i]) {
            // 内存分配失败时清理
            for (int j = 0; j < i; j++) free((*segment)[j]);
            free(*segment);
            free(temp);
            return -1;
        }
        i++;
        token = strtok_r(NULL, delim, &saveptr);
    }
    
    // 5. 释放临时内存
    free(temp);
    return count;
}

/* int main() { */
/*     // 测试数据 */
/*     const char *path = "root/usr/local/bin"; */
/*     char **segments = NULL; */
    
/*     // 调用分割函数 */
/*     int count = split_str(path, &segments); */
    
/*     if (count < 0) { */
/*         printf("内存分配失败！\n"); */
/*         return 1; */
/*     } */
    
/*     // 打印分割结果 */
/*     printf("分割数量: %d\n", count); */
/*     for (int i = 0; i < count; i++) { */
/*         printf("[%d] %s\n", i, segments[i]); */
/*     } */
    
/*     // 释放内存 */
/*     for (int i = 0; i < count; i++) { */
/*         free(segments[i]); */
/*     } */
/*     free(segments); */
    
/*     return 0; */
/* } */
